package chemtools_logica.BDL.SFBean;

import chemtools_logica.Entidades.Gasto;

import chemtools_logica.BDL.IL.BDL_SFGastoLocal;
import chemtools_logica.BDL.IR.BDL_SFGastoRemote;

import chemtools_logica.Beans.GastoBean;

import chemtools_logica.Beans.gastoGraficoBean;

import chemtools_logica.Entidades.Almacen;

import chemtools_logica.Entidades.Graficogasto;
import chemtools_logica.Entidades.Insumo;

import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless(name = "BDL_SFGasto", mappedName = "map-BDL_SFGasto")
public class BDL_SFGastoBean implements BDL_SFGastoRemote, BDL_SFGastoLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    public BDL_SFGastoBean() {
    }

    public Gasto persistGasto(Gasto gasto) {
        em.persist(gasto);
        return gasto;
    }

    public Gasto mergeGasto(Gasto gasto) {
        return em.merge(gasto);
    }

    public void removeGasto(Gasto gasto) {
        gasto = em.find(Gasto.class, gasto.getIdGastos());
        em.remove(gasto);
    }

    /** <code>select o from Gasto o</code> */
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public List<Gasto> getGastoFindAll() {
        return em.createNamedQuery("Gasto.findAll", Gasto.class).getResultList();
    }
    
    public List<Gasto>getAllGastos(){
        List<Gasto> listaGastos = new ArrayList<Gasto>();
        String ejbQuery = "SELECT g.* FROM gasto g " +
                          "INNER JOIN usuario u " +
                          "ON g.idUsuario = u.idUsuario " +
                          "INNER JOIN persona p " +
                          "ON u.idPersona = p.idPersona";
        
        try{
            Query query = em.createNativeQuery(ejbQuery, Gasto.class);
            listaGastos = query.getResultList();
        }catch(Exception e)
        {
            listaGastos = null;
        }
        
        return listaGastos;
    }
    
    public List<Gasto> getGastosFiltro(GastoBean bean){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        List<Gasto> listaGastos = new ArrayList<Gasto>();
        String ejbQuery = "SELECT g.* FROM gasto g " +
                          "INNER JOIN usuario u " +
                          "ON g.idUsuario = u.idUsuario " +
                          "INNER JOIN persona p " +
                          "ON u.idPersona = p.idPersona " +
                          "WHERE 1=1 ";
        
        if(bean.getIdBanco() != 0){
            ejbQuery += "AND g.idBanco = "+bean.getIdBanco()+" ";
        }
        if(bean.getIdTipoGasto() != 0){
            ejbQuery += "AND g.idTipoGasto = "+bean.getIdTipoGasto()+" ";
        }
        if(bean.getFechaMax() != null || bean.getFechaMin() != null){
            if(bean.getFechaMin() != null){
                ejbQuery += "AND g.Fecha >= '"+sdf.format(bean.getFechaMin())+"' ";
            }
            if(bean.getFechaMax() != null){
                ejbQuery += "AND g.Fecha <= '"+sdf.format(bean.getFechaMax())+"' ";
            } 
        }
        
        try{
            Query query = em.createNativeQuery(ejbQuery, Gasto.class);
            listaGastos = query.getResultList();
        }catch(Exception e)
        {
            listaGastos = null;
        }
        
        return listaGastos;
    }
    
    public List<Graficogasto> getChart(){
        List<Graficogasto>  lista = new ArrayList<Graficogasto>();
        String ejb = "SELECT u FROM Graficogasto u";
        try{
        Query query = em.createQuery(ejb);
        lista = query.getResultList();
        }catch(Exception e){
        }
        return lista;
    }
}
